//=============================================================================
// EXECUTABLE 'MAPDISK'
//=============================================================================
// per Marc Delgado (marcdelgado@gmail.com) | rev. 2012.06.11

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include "utils.hpp"
using namespace std;

//VARIABLES GLOBALS I FUNCIONS
FILE* _file;    //punter a fitxer del disc físic.
int midaKB;     //nombre de pàgines o mida del fitxer en KB.
void ajuda();   //Mostra l'ajuda d'aquesta aplicació.


//FUNCIO PRINCIPAL
///////////////////////////////////////////////////////////////////////////////


int main(int argc, char *argv[])
{
	if(argc==4){
		//Preparem l'arxiu i obtenim la mida
		_file = fopen(argv[1], "rb");
		midaKB = atoi(argv[2]);
		//Calculem les pagines que te.
		fseek (_file, 0, SEEK_END);
		long int mida = ftell(_file) / 1024;
		fseek (_file, 0, SEEK_SET);
		//Comprobem que no demanem una pagina fora de rang
		if (atoi(argv[2]) >= 0 and mida > atoi(argv[2]))
		{
			char* buf = new char[1024];
			fseek (_file, 1024*atoi(argv[2]), SEEK_SET);
			fread(buf, 1, 1024, _file);
			//Mostrem mapa de dades, segons el format escullit.
			if(strcmp(argv[3],"-hex")==0) utils::mapArray (buf, 1024, HEX);
			else if (strcmp(argv[3],"-bin")==0) utils::mapArray (buf, 1024, BIN);
			else if (strcmp(argv[3],"-ascii")==0) utils::mapArray (buf, 1024, ASCII);
			else ajuda();
		}
		else cout << "ERROR: La pagina o el fitxer no existeix." << endl;
	}
	else ajuda();
	//Tanquem l'arxiu
	fclose (_file);
}


//FUNCIONS AUXILIARS
///////////////////////////////////////////////////////////////////////////////


//Mostra informacio sobre els parametres d'execucio
void ajuda()
{
	cout << endl;
	cout << "FBDA Crear Disk - Parametres:" << endl;
	cout << "MapDisk [nom_fitxer] [num_pagina] -hex" << endl;
	cout << "MapDisk [nom_fitxer] [num_pagina] -bin" << endl;
	cout << "MapDisk [nom_fitxer] [num_pagina] -ascii" << endl;
}


